package pe.com.casadesign.dao.impl;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.simple.SimpleJdbcCall;
import org.springframework.stereotype.Repository;

import pe.com.casadesign.dao.ProveedorDAO;
import pe.com.casadesign.domain.ContactoProveedor;
import pe.com.casadesign.domain.ListaContactoProveedor;
import pe.com.casadesign.domain.ListaProveedor;
import pe.com.casadesign.domain.Proveedor;
import pe.com.casadesign.domain.Pais;
import pe.com.casadesign.domain.Distrito;

/**
 * Implementacion de ProveedorDAO.
 * 
 * @author Pedro Vera
 * 
 */
@Repository
public class ProveedorDAOImpl implements ProveedorDAO {
	private static final Logger logger = LoggerFactory.getLogger(ProveedorDAOImpl.class);
	
	// Nombre Procedimientos Almacenados
	private static String SP_LISTAR_PROVEEDOR = "SP_LISTAR_PROVEEDOR";
	private static String SP_OBTENER_PROVEEDOR = "SP_OBTENER_PROVEEDOR";
	private static String SP_OBTENER_PROVEEDOR_PORIDEN = "SP_OBTENER_PROVEEDOR_PORIDEN";
	private static String SP_REGISTRAR_PROVEEDOR = "SP_REGISTRAR_PROVEEDOR";
	private static String SP_MODIFICAR_PROVEEDOR = "SP_MODIFICAR_PROVEEDOR";
	private static String SP_ELIMINAR_PROVEEDOR = "SP_ELIMINAR_PROVEEDOR";
	
	private static String SP_REGISTRAR_CONTACTO_PROVEEDOR = "SP_REGISTRAR_CONTACTO_PROVEEDOR";
	private static String SP_LIMPIAR_CONTACTO_PROVEEDOR = "SP_LIMPIAR_CONTACTO_PROVEEDOR";
	private static String SP_MODIFICAR_CONTACTO_PROVEEDOR ="SP_MODIFICAR_CONTACTO_PROVEEDOR";
	
	// Parametros de Entrada4
	private static String PARAM_CODPROVEEDOR = "p_codproveedor";
	private static String PARAM_RAZONSOCIAL = "p_razonsocial";
	private static String PARAM_OBSERVACION = "p_observacion";
	private static String PARAM_IDENTIFICACION = "p_identificacion";
	private static String PARAM_DIRECCION = "p_direccion";
	private static String PARAM_CODDISTRITO = "p_coddistrito";
	private static String PARAM_CODPROVINCIA = "p_codprovincia";
	private static String PARAM_CODREGION = "p_codregion";
	private static String PARAM_TIPO = "p_tipo";
	private static String PARAM_ESTADO = "p_estado";
	private static String PARAM_CODPAIS = "p_pais";
		
	private static String PARAM_CONTACTO_NOMBRESYAPELLIDOS = "p_nombresyapellidos";
	private static String PARAM_CONTACTO_EMAIL = "p_email";
	private static String PARAM_CONTACTO_TELEFONO = "p_telefono";
	private static String PARAM_CONTACTO_CARGO = "p_cargo";
	private static String PARAM_CONTACTO_ANEXO = "p_anexo";
	
	// Parametros de Salida
	private static String CODPROVEEDOR = "CODPROVEEDOR";
	private static String RAZONSOCIAL = "RAZONSOCIAL";
	private static String OBSERVACION = "OBSERVACION";
	private static String IDENTIFICACION = "IDENTIFICACION";
	private static String DIRECCION = "DIRECCION";
    private static String CODDISTRITO = "CODDISTRITO";
	private static String CODPROVINCIA = "CODPROVINCIA";
	private static String CODREGION = "CODREGION";
	private static String DISTRITO_DESCRIPCION = "DESCRIPCION";
	private static String TIPO = "TIPO";
	private static String ESTADO = "ESTADO";
	private static String FECHAREGISTRO = "FECHAREGISTRO";
	private static String CODPAIS = "CODPAIS";
	private static String PAIS = "PAIS";
	
	private static String CONTACTO_NOMBRESYAPELLIDOS = "NOMBRESYAPELLIDOS";
	private static String CONTACTO_EMAIL = "EMAIL";
	private static String CONTACTO_TELEFONO = "TELEFONO";
	private static String CONTACTO_CARGO = "CARGO";
	private static String CONTACTO_ANEXO = "ANEXO";
	
	private static String LISTADO = "LISTADO";
	private static String LISTADO_CONTACTOS = "LISTADO_CONTACTOS";
	
	private static String TOTAL_FILAS_AFECTADAS = "#update-count-1";
	
	private JdbcTemplate jdbcTemplate;

	@Autowired
    public void setDataSource(DataSource dataSource)
    {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }
	
	@Override
	public ListaProveedor listarProveedor(Proveedor proveedor) {
		logger.info("listarProveedor");

		// Instanciando variable para llamado de SP
	    SimpleJdbcCall llamarSP = new SimpleJdbcCall(jdbcTemplate).withProcedureName(SP_LISTAR_PROVEEDOR).
	    						  returningResultSet(LISTADO, new RowMapper<Proveedor>(){
									@Override
									public Proveedor mapRow(final ResultSet rs, final int numRow) throws SQLException
								    {
								        final Proveedor proveedor = new Proveedor();
								        proveedor.setCodProveedor(rs.getInt(CODPROVEEDOR));
								        proveedor.setTipo(rs.getString(TIPO));
								        proveedor.setRazonSocial(rs.getString(RAZONSOCIAL));
								        proveedor.setObservacion(rs.getString(OBSERVACION));
								        proveedor.setIdentificacion(rs.getString(IDENTIFICACION));
								        proveedor.setDireccion(rs.getString(DIRECCION));
								        proveedor.setEstado(rs.getString(ESTADO));
								        proveedor.setFechaRegistro(rs.getDate(FECHAREGISTRO).toString());

								        Pais pais = new Pais();
								        pais.setcodPais(rs.getInt(CODPAIS));
								        pais.setdesPais(rs.getString(PAIS).toString());
								        proveedor.setPais(pais);
								        
								        Distrito distrito = new Distrito();
								        distrito.setCodigo(rs.getInt(CODDISTRITO));
								        distrito.setCodProvincia(rs.getInt(CODPROVINCIA));
								        distrito.setCodRegion(rs.getInt(CODREGION));
								        distrito.setDescripcion(rs.getString(DISTRITO_DESCRIPCION));
								        proveedor.setDistrito(distrito);
								        
								        return proveedor;
								    }
	    						  }
								);

	    // Estableciendo parametros de entrada al SP
	    SqlParameterSource parametros = new MapSqlParameterSource()
	    								.addValue(PARAM_IDENTIFICACION, proveedor.getIdentificacion())
	    								.addValue(PARAM_RAZONSOCIAL, proveedor.getRazonSocial())
	    								.addValue(PARAM_TIPO, proveedor.getTipo())
	    								.addValue(PARAM_ESTADO, proveedor.getEstado()); 

	    // Establecer parametros y ejecutar SP
        Map<String,Object> data = llamarSP.execute(parametros);

        // Obteniendo lista generada de ejecutar SP
		@SuppressWarnings("unchecked")
		List<Proveedor> listaProveedor= (List<Proveedor>)data.get(LISTADO);
        
		// Instanciando objeto ListaProveedor
		ListaProveedor listaProveedorResultado = new ListaProveedor();
        // Estableciendo resultado al objeto listaProveedorResultado
		listaProveedorResultado.setLista(listaProveedor);
        
        if (logger.isDebugEnabled() && listaProveedorResultado != null)
        {
            logger.debug("size=" + listaProveedorResultado.size());
        }
        return listaProveedorResultado;
	}

	@Override
	public Proveedor obtenerProveedor(Proveedor proveedor) {
		logger.info("obtenerProveedor");

		// Instanciando variable para llamado de SP
	    SimpleJdbcCall llamarSP = new SimpleJdbcCall(jdbcTemplate).withProcedureName(SP_OBTENER_PROVEEDOR).
	    						  returningResultSet(LISTADO, new RowMapper<Proveedor>(){
									@Override
									public Proveedor mapRow(final ResultSet rs, final int numRow) throws SQLException
								    {
								        final Proveedor proveedor = new Proveedor();
								        proveedor.setCodProveedor(rs.getInt(CODPROVEEDOR));
								        proveedor.setTipo(rs.getString(TIPO));
								        proveedor.setRazonSocial(rs.getString(RAZONSOCIAL));
								        proveedor.setObservacion(rs.getString(OBSERVACION));
								        proveedor.setIdentificacion(rs.getString(IDENTIFICACION));
								        proveedor.setDireccion(rs.getString(DIRECCION));
								        proveedor.setEstado(rs.getString(ESTADO));
								        proveedor.setFechaRegistro(rs.getDate(FECHAREGISTRO).toString());

								        Distrito distrito = new Distrito();
								        distrito.setCodigo(rs.getInt(CODDISTRITO));
								        distrito.setCodProvincia(rs.getInt(CODPROVINCIA));
								        distrito.setCodRegion(rs.getInt(CODREGION));
								        distrito.setDescripcion(rs.getString(DISTRITO_DESCRIPCION));
								        proveedor.setDistrito(distrito);
								        
								        Pais pais = new Pais();
								        pais.setcodPais(rs.getInt(CODPAIS));
								        pais.setdesPais(rs.getString(PAIS).toString());
								        proveedor.setPais(pais);
								        
								        return proveedor;
								    }
	    						  }
								 )
								 .returningResultSet(LISTADO_CONTACTOS, new RowMapper<ContactoProveedor>(){
									@Override
									public ContactoProveedor mapRow(final ResultSet rs, final int numRow) throws SQLException
								    {
								        final ContactoProveedor contactoProveedor = new ContactoProveedor();
								        contactoProveedor.setNombresyApellidos(rs.getString(CONTACTO_NOMBRESYAPELLIDOS));
								        contactoProveedor.setEmail(rs.getString(CONTACTO_EMAIL));
								        contactoProveedor.setTelefono(rs.getString(CONTACTO_TELEFONO));
								        contactoProveedor.setCargo(rs.getString(CONTACTO_CARGO));
								        contactoProveedor.setAnexo(rs.getString(CONTACTO_ANEXO));
								        return contactoProveedor;
								    }
	    						  });
	    
	    // Estableciendo parametros de entrada al SP
	    SqlParameterSource parametros = new MapSqlParameterSource()
	    								.addValue(PARAM_CODPROVEEDOR, proveedor.getCodProveedor()); 

	    // Establecer parametros y ejecutar SP
        Map<String,Object> data = llamarSP.execute(parametros);

        // Obteniendo lista generada de ejecutar SP
 		@SuppressWarnings("unchecked")
 		List<Proveedor> listaProveedor= (List<Proveedor>)data.get(LISTADO);
         
 		// Declarando objeto proveedor Obtenido
 		Proveedor proveedorObtenido = null;
 		
 		if (logger.isDebugEnabled() && listaProveedor != null)
        {
            logger.debug("size=" + listaProveedor.size());
        }
 		
 		if (listaProveedor != null && listaProveedor.size()>0){
 			// Obteniendo el primer elemento de la lista de proveedor
 			proveedorObtenido = listaProveedor.get(0);
 		
	        // Obteniendo lista de contactos generada de ejecutar SP
			@SuppressWarnings("unchecked")
			List<ContactoProveedor> listaContactoProveedor= (List<ContactoProveedor>)data.get(LISTADO_CONTACTOS);
	        
			// Instanciando objeto ListaContactoProveedor
			ListaContactoProveedor listaContactoProveedorResultado = new ListaContactoProveedor();
	        // Estableciendo resultado al objeto ListaProvedor
			listaContactoProveedorResultado.setLista(listaContactoProveedor);
	        
			// Asignando lista de contactos al objeto proveedor creado
			proveedorObtenido.setListaContactoProveedor(listaContactoProveedorResultado);
			
	        if (logger.isDebugEnabled() && listaContactoProveedor != null)
	        {
	            logger.debug("sizeContactos=" + listaContactoProveedor.size());
	        }
 		}
        return proveedorObtenido;
	}

	@Override
	public Proveedor obtenerProveedorPorIdentificacion(Proveedor proveedor) {
		logger.info("obtenerProveedorPorIdentificacion");

		// Instanciando variable para llamado de SP
	    SimpleJdbcCall llamarSP = new SimpleJdbcCall(jdbcTemplate).withProcedureName(SP_OBTENER_PROVEEDOR_PORIDEN).
	    						  returningResultSet(LISTADO, new RowMapper<Proveedor>(){
									@Override
									public Proveedor mapRow(final ResultSet rs, final int numRow) throws SQLException
								    {
								        final Proveedor proveedor = new Proveedor();
								        proveedor.setCodProveedor(rs.getInt(CODPROVEEDOR));
								        proveedor.setTipo(rs.getString(TIPO));
								        proveedor.setRazonSocial(rs.getString(RAZONSOCIAL));
								        proveedor.setObservacion(rs.getString(OBSERVACION));
								        proveedor.setIdentificacion(rs.getString(IDENTIFICACION));
								        proveedor.setDireccion(rs.getString(DIRECCION));
								        proveedor.setEstado(rs.getString(ESTADO));
								        proveedor.setFechaRegistro(rs.getDate(FECHAREGISTRO).toString());
								        
								        Distrito distrito = new Distrito();
								        distrito.setCodigo(rs.getInt(CODDISTRITO));
								        distrito.setCodProvincia(rs.getInt(CODPROVINCIA));
								        distrito.setCodRegion(rs.getInt(CODREGION));
								        distrito.setDescripcion(rs.getString(DISTRITO_DESCRIPCION));
								        proveedor.setDistrito(distrito);
								        
								        Pais pais = new Pais();
								        pais.setcodPais(rs.getInt(CODPAIS));
								        pais.setdesPais(rs.getString(PAIS).toString());
								        proveedor.setPais(pais);
								        return proveedor;
								    }
	    						  }
								 )
								 .returningResultSet(LISTADO_CONTACTOS, new RowMapper<ContactoProveedor>(){
									@Override
									public ContactoProveedor mapRow(final ResultSet rs, final int numRow) throws SQLException
								    {
								        final ContactoProveedor contactoProveedor = new ContactoProveedor();
								        contactoProveedor.setNombresyApellidos(rs.getString(CONTACTO_NOMBRESYAPELLIDOS));
								        contactoProveedor.setEmail(rs.getString(CONTACTO_EMAIL));
								        contactoProveedor.setTelefono(rs.getString(CONTACTO_TELEFONO));
								        contactoProveedor.setCargo(rs.getString(CONTACTO_CARGO));
								        contactoProveedor.setAnexo(rs.getString(CONTACTO_ANEXO));
								        return contactoProveedor;
								    }
	    						  });
	    
	    // Estableciendo parametros de entrada al SP
	    SqlParameterSource parametros = new MapSqlParameterSource()
	    								.addValue(PARAM_IDENTIFICACION, proveedor.getIdentificacion()); 

	    // Establecer parametros y ejecutar SP
        Map<String,Object> data = llamarSP.execute(parametros);

        // Obteniendo lista generada de ejecutar SP
 		@SuppressWarnings("unchecked")
 		List<Proveedor> listaProveedor= (List<Proveedor>)data.get(LISTADO);
         
 		// Declarando objeto proveedor Obtenido
 		Proveedor proveedorObtenido = null;
 		
 		if (logger.isDebugEnabled() && listaProveedor != null)
        {
            logger.debug("size=" + listaProveedor.size());
        }
 		
 		if (listaProveedor != null && listaProveedor.size()>0){
 			// Obteniendo el primer elemento de la lista de proveedor
 			proveedorObtenido = listaProveedor.get(0);
 		
	        // Obteniendo lista de contactos generada de ejecutar SP
			@SuppressWarnings("unchecked")
			List<ContactoProveedor> listaContactoProveedor= (List<ContactoProveedor>)data.get(LISTADO_CONTACTOS);
	        
			// Instanciando objeto ListaContactoProveedor
			ListaContactoProveedor listaContactoProveedorResultado = new ListaContactoProveedor();
	        // Estableciendo resultado al objeto ListaProvedor
			listaContactoProveedorResultado.setLista(listaContactoProveedor);
	        
			// Asignando lista de contactos al objeto proveedor creado
			proveedorObtenido.setListaContactoProveedor(listaContactoProveedorResultado);
			
	        if (logger.isDebugEnabled() && listaContactoProveedor != null)
	        {
	            logger.debug("sizeContactos=" + listaContactoProveedor.size());
	        }
 		}
        return proveedorObtenido;
	}
	
	@Override
	public boolean registrarProveedor(Proveedor proveedor) {
		logger.info("registrarProveedor");
		
		int resultado = 0;
		
		// Instanciando variable para llamado de SP
	    SimpleJdbcCall llamarSP = new SimpleJdbcCall(jdbcTemplate)
	    							  .withProcedureName(SP_REGISTRAR_PROVEEDOR);

	    // Estableciendo parametros de entrada al SP
	    SqlParameterSource parametros = new MapSqlParameterSource()
	    								.addValue(PARAM_RAZONSOCIAL, proveedor.getRazonSocial())
	    								.addValue(PARAM_OBSERVACION, proveedor.getObservacion())
	    								.addValue(PARAM_TIPO, proveedor.getTipo())
	    								.addValue(PARAM_IDENTIFICACION, proveedor.getIdentificacion())
	    								.addValue(PARAM_DIRECCION, proveedor.getDireccion())
	    								.addValue(PARAM_CODDISTRITO, proveedor.getDistrito().getCodigo())
	    								.addValue(PARAM_CODPROVINCIA, proveedor.getDistrito().getCodProvincia())
	    								.addValue(PARAM_CODREGION, proveedor.getDistrito().getCodRegion())
	    								.addValue(PARAM_ESTADO, proveedor.getEstado())
	    								.addValue(PARAM_CODPAIS, proveedor.getPais().getcodPais());
	    
	    // Establecer parametros y ejecutar SP
	    Map<String,Object> data = llamarSP.execute(parametros);
	    
	    // Obteniendo el total de filas afectadas al ejecutar SP
	    resultado += (Integer) data.get(TOTAL_FILAS_AFECTADAS);
	    
	    logger.debug("codigo generado:" + data.get(PARAM_CODPROVEEDOR));

	    // Obteniendo codigo de proveedor
	    int codigoProveedor = (Integer)data.get(PARAM_CODPROVEEDOR);

	    // Obteniendo lista de contactos a agregar
	    ListaContactoProveedor listaContactoProveedor = proveedor.getListaContactoProveedor();
	    
	    // Si existen contactos entonces registrarlos
	    if(listaContactoProveedor.getLista() != null){
		    // Instanciando variable para llamado de SP
		    SimpleJdbcCall llamarSPContactos = new SimpleJdbcCall(jdbcTemplate).withProcedureName(SP_REGISTRAR_CONTACTO_PROVEEDOR);
	
		    for (ContactoProveedor item : listaContactoProveedor.getLista()){
			    // Estableciendo parametros de entrada al SP
			    SqlParameterSource parametrosContactos = new MapSqlParameterSource()
						    								.addValue(PARAM_CODPROVEEDOR, codigoProveedor)
						    								.addValue(PARAM_CONTACTO_NOMBRESYAPELLIDOS, item.getNombresyApellidos())
						    								.addValue(PARAM_CONTACTO_EMAIL, item.getEmail())
						    								.addValue(PARAM_CONTACTO_TELEFONO , item.getTelefono())
						    								.addValue(PARAM_CONTACTO_CARGO, item.getCargo())
						    								.addValue(PARAM_CONTACTO_ANEXO, item.getAnexo());
			    
			    // Establecer parametros y ejecutar SP
			    Map<String,Object> dataContacto = llamarSPContactos.execute(parametrosContactos);
			    
			    // Obteniendo el total de filas afectadas al ejecutar SP
			    resultado += (Integer) dataContacto.get(TOTAL_FILAS_AFECTADAS);
		    }
	    }
	    
	    return resultado > 0;
	}

	@Override
	public boolean modificarProveedor(Proveedor proveedor) {
		logger.info("modificarProveedor");
		
		int resultado = 0;
		
		// Instanciando variable para llamado de SP
	    SimpleJdbcCall llamarSP = new SimpleJdbcCall(jdbcTemplate).withProcedureName(SP_MODIFICAR_PROVEEDOR);

	    // Estableciendo parametros de entrada al SP
	    SqlParameterSource parametros = new MapSqlParameterSource()
	    								.addValue(PARAM_CODPROVEEDOR, proveedor.getCodProveedor())
	    								.addValue(PARAM_RAZONSOCIAL, proveedor.getRazonSocial())
	    								.addValue(PARAM_OBSERVACION, proveedor.getObservacion())
	    								.addValue(PARAM_TIPO, proveedor.getTipo())
	    								.addValue(PARAM_IDENTIFICACION, proveedor.getIdentificacion())
	    								.addValue(PARAM_DIRECCION, proveedor.getDireccion())
	    								.addValue(PARAM_CODDISTRITO, proveedor.getDistrito().getCodigo())
	    								.addValue(PARAM_CODPROVINCIA, proveedor.getDistrito().getCodProvincia())
	    								.addValue(PARAM_CODREGION, proveedor.getDistrito().getCodRegion())
	    								.addValue(PARAM_ESTADO, proveedor.getEstado())
	    								.addValue(PARAM_CODPAIS, proveedor.getPais().getcodPais());
	    
	    // Establecer parametros y ejecutar SP
	    Map<String,Object> data = llamarSP.execute(parametros);
	    
	    // Obteniendo el total de filas afectadas al ejecutar SP
	    resultado += (Integer) data.get(TOTAL_FILAS_AFECTADAS);
	    
	    // Instanciando variable para llamado de SP Eliminar contactos
	    SimpleJdbcCall llamarSPLimpiarContactos = new SimpleJdbcCall(jdbcTemplate).withProcedureName(SP_LIMPIAR_CONTACTO_PROVEEDOR);
	    // Agregar parametro codigo de cliente
	    llamarSPLimpiarContactos.execute(new MapSqlParameterSource()
										     .addValue(PARAM_CODPROVEEDOR, proveedor.getCodProveedor()));
	    
	    // Obteniendo lista de contactos a agregar
	    ListaContactoProveedor listaContactoProveedor = proveedor.getListaContactoProveedor();
	    
	    // Si existen contactos entonces registrarlos
	    if(listaContactoProveedor.getLista() != null){
		    // Instanciando variable para llamado de SP Agregar contactos
		    SimpleJdbcCall llamarSPContactos = new SimpleJdbcCall(jdbcTemplate).withProcedureName(SP_REGISTRAR_CONTACTO_PROVEEDOR);
	
		    for (ContactoProveedor item : listaContactoProveedor.getLista()){
			    // Estableciendo parametros de entrada al SP
			    SqlParameterSource parametrosConactos = new MapSqlParameterSource()
						    								.addValue(PARAM_CODPROVEEDOR, proveedor.getCodProveedor())
						    								.addValue(PARAM_CONTACTO_NOMBRESYAPELLIDOS, item.getNombresyApellidos())
						    								.addValue(PARAM_CONTACTO_EMAIL, item.getEmail())
						    								.addValue(PARAM_CONTACTO_TELEFONO , item.getTelefono())
						    								.addValue(PARAM_CONTACTO_CARGO, item.getCargo())
						    								.addValue(PARAM_CONTACTO_ANEXO, item.getAnexo());
			    
			    // Establecer parametros y ejecutar SP
			    Map<String,Object> dataContacto = llamarSPContactos.execute(parametrosConactos);
			    
			    // Obteniendo el total de filas afectadas al ejecutar SP
			    resultado += (Integer) dataContacto.get(TOTAL_FILAS_AFECTADAS);
		    }
	    }
	    return resultado > 0;
	}

	@Override
	public boolean eliminarProveedor(Proveedor proveedor) {
		logger.info("eliminarProveedor");
		
		// Instanciando variable para llamado de SP
	    SimpleJdbcCall llamarSP = new SimpleJdbcCall(jdbcTemplate).withProcedureName(SP_ELIMINAR_PROVEEDOR);

	    // Estableciendo parametros de entrada al SP
	    SqlParameterSource parametros = new MapSqlParameterSource()
	    								.addValue(PARAM_CODPROVEEDOR, proveedor.getCodProveedor());
	    
	    // Establecer parametros y ejecutar SP
	    Map<String,Object> data = llamarSP.execute(parametros);
	    
	    // Obteniendo el total de filas afectadas al ejecutar SP
	    int totalRegistrosAfectado = (Integer) data.get(TOTAL_FILAS_AFECTADAS);
	    
	    return totalRegistrosAfectado > 0;
	}

}
